The present invention relates to dynamically adding resources to an operating system.
A general requirement of modern operating systems is the ability to constrain the use of resources such as CPU cycles, memory allocations, and I/O bandwidth by specific entities on the system. Current systems perform this in a limited fashion, by restricting the entity seeking a resource control to a process (an executing computer program) and the available resource controls to an unchanging set of attributes. The advent of dynamically loadable operating system software can bring new features to the operating system that require new resource controls. Presently many resource control systems are not designed to handle such a dynamic change in resource controls.
Generally, programs executing in an operating system are presently unable to deal with added resources, i.e. resources added after booting the operating system. Specifically, existing programs executing under current operating systems are unaware of what resources may have been added and might be available to it. As a result, the number of resources are effectively fixed once the operating system has been booted. Examples of the types of fixed resources that have constraints include stack size, CPU space, address space, maximum file size, number of open files, and the maximum mapped memory for a process.
An example of an added resource is a scheduling algorithm that presented tunable values to each process it planned to schedule. The operating system could unload the scheduling algorithm from the operating system if no process or other entity was using it.
Requests for resources having constraints under current operating systems are made typically by the process (local entity) and result in fixed actions. That is, the entity will either get the signal for the resource or be denied the resource. Current operating systems have a fixed number of active limits on usage of a given resource. These active limits are typically described, for example, in UNIX systems as “soft” and “hard” values. That is, an active limit of a particular resource has a “soft” limit value and a “hard” limit value. Meeting or exceeding the lower of the two values (soft limit) triggers the action associated with it. For example, where the usage of memory space has reached the threshold of the “soft” limit, the program or process is denied the memory space resource. Oftentimes, however, it is desirable to have a progressive series of control limits to provide warnings that resource usage may be approaching the absolute limit set by an operating system and also to permit an administrator to monitor the resource usage.
Consequently, what is needed is a method for dynamically adding new software (i.e. functionality) to an operating system and having resource constraints (controls) dynamically recognizable to the operating system. Such a method would make the resources available to processes, tasks, or projects without rebooting the system. What is further needed is added flexibility in the operating system to allow a variable number of limiting values and actions associated with resource usage, to enable actions such as warnings or other monitoring actions to be provided to the process, the operating system, or an administrator and to allow a process to change the action associated with a control when appropriate.